<?php
//单例模式singleton
// 所谓单例模式，即在应用程序中最多只有该类的一个实例存在，一旦创建，就会一直存在于内存中！
//
// 单例设计模式常应用于数据库类设计，采用单例模式，只连接一次数据库，防止打开多个数据库连接。
//
// 一个单例类应具备以下特点：
//
// 单例类不能直接实例化创建，而是只能由类本身实例化。因此，要获得这样的限制效果，构造函数必须标记为private，从而防止类被实例化。
//
// 需要一个私有静态成员变量来保存类实例和公开一个能访问到实例的公开静态方法。
//
// 在PHP中，为了防止他人对单例类实例克隆，通常还为其提供一个空的私有__clone()方法。
class SingleObject  {
    private static $SingleObject = null;
    private function __construct(){
        echo __METHOD__.PHP_EOL;
    }
    public static function get_instance(){
        if (!(self::$SingleObject instanceof self)){
            self::$SingleObject=new self();
        }
        return self::$SingleObject;
    }
    private function __clone(){
        trigger_error();
    }
}
$SingleObject1 = SingleObject::get_instance();
$SingleObject2 = SingleObject::get_instance();
$SingleObject3 = SingleObject::get_instance();
$SingleObject4 = SingleObject::get_instance();
var_dump($SingleObject1,$SingleObject2,$SingleObject3,$SingleObject4);
// SingleObject::__construct();





